#! /usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
import sys, os, sqlite3, todo
from elixir import *
from ventanaNuevaVentaUI import Ui_Form

class FormNuevaVenta(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui = Ui_Form()
        self.center()
        self.ui.setupUi(self)

        self.ui.treeWidget.resizeColumnToContents(0)
        self.ui.treeWidget.resizeColumnToContents(1)
        self.ui.treeWidget.resizeColumnToContents(2)
        self.ui.treeWidget.resizeColumnToContents(3)
        self.ui.treeWidget.resizeColumnToContents(4)
        self.cargaArticulos()

    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def cargaArticulos(self):
        self.ui.comboArticulo.clear()
        try:
            self.articulos = todo.Articulo.query.filter(todo.Articulo.stock>0).all()
            for articulo in self.articulos:
                self.ui.comboArticulo.insertItem(articulo.id, articulo.nombre)

            self.cantidadPrecio()

        except:
            pass

    def habilitaQuitar(self):
        if self.ui.treeWidget.topLevelItemCount() == 0:
            self.ui.pushButton_3.setEnabled(False)
            self.ui.pushButton_2.setEnabled(False)

        else:
            self.ui.pushButton_3.setEnabled(True)
            if int(self.ui.labelTotal.text()) >= 0:
                self.ui.spinPago.setMinimum(int(self.ui.labelTotal.text()))
                self.ui.pushButton_2.setEnabled(True)

    def habilitar(self):
        self.ui.spinCantidad.setEnabled(True)
        self.ui.spinPrecio.setEnabled(True)
        self.ui.pushButton.setEnabled(True)

    def bloquear(self):
        self.ui.spinCantidad.setEnabled(False)
        self.ui.spinPrecio.setEnabled(False)
        self.ui.pushButton.setEnabled(False)

    def cantidadPrecio(self):
        nombre = self.ui.comboArticulo.currentText()
        try:
            articulo = todo.Articulo.get_by(nombre=unicode(nombre))
            self.ui.spinCodigo.setValue(articulo.id)
            self.ui.spinCantidad.setMaximum(articulo.stock)
            self.ui.spinPrecio.setValue(articulo.precio)
            self.habilitar()

        except:
            self.bloquear()

    def cantidadPrecio2(self):
        if len(self.articulos) > 0:
            codigo = self.ui.spinCodigo.value()
            articulo = todo.Articulo.get(codigo)
            if articulo in self.articulos:
                indice = self.ui.comboArticulo.findText(str(articulo.nombre), QtCore.Qt.MatchWildcard)
                self.ui.comboArticulo.setCurrentIndex(indice)
                self.ui.spinCantidad.setMaximum(articulo.stock)
                self.ui.spinPrecio.setValue(articulo.precio)
                self.habilitar()

            else:
                self.cargaArticulos()

        else:
            self.ui.spinCodigo.setValue(0)
            self.bloquear()

    def agregar(self):
        codigo = self.ui.spinCodigo.value()
        nombre = self.ui.comboArticulo.itemText(self.ui.comboArticulo.currentIndex())
        cantidad = self.ui.spinCantidad.value()
        precio = self.ui.spinPrecio.value()

        item = self.ui.treeWidget.findItems(nombre, QtCore.Qt.MatchWildcard, 1)

        if len(item) > 0:
            if int(item[0].text(0)) == codigo:
                item[0].setText(2, str(int(item[0].text(2)) + cantidad))
                item[0].setText(3, str(int(item[0].text(2)) * self.ui.spinPrecio.value()))
            else:
                item=QtGui.QTreeWidgetItem([str(codigo), nombre, str(cantidad), str(precio), str(precio*cantidad)])
                item.setTextAlignment(0, 2)
                item.setTextAlignment(2, 2)
                item.setTextAlignment(3, 2)
                item.setTextAlignment(4, 2)
                self.ui.treeWidget.addTopLevelItem(item)
        else:
            item=QtGui.QTreeWidgetItem([str(codigo), nombre, str(cantidad), str(precio), str(precio*cantidad)])
            item.setTextAlignment(0, 2)
            item.setTextAlignment(2, 2)
            item.setTextAlignment(3, 2)
            item.setTextAlignment(4, 2)
            self.ui.treeWidget.addTopLevelItem(item)
        
        self.ui.labelTotal.setText(str(int(self.ui.labelTotal.text()) + (precio*cantidad)))
        articulo = todo.Articulo.get(codigo)
        articulo.stock -= cantidad

        self.ui.spinCantidad.setValue(1)
        self.habilitaQuitar()
        self.cargaArticulos()

    def vuelto(self):
        self.ui.labelVuelto.setText(str(self.ui.spinPago.value() - int(self.ui.labelTotal.text())))

    def vender(self):
        total = self.ui.labelTotal.text()
        pago = self.ui.spinPago.value()
        vuelto = self.ui.labelVuelto.text()
        forma_pago = self.ui.comboForma.currentText()
        
        venta = todo.Venta(forma_pago=unicode(forma_pago), pago=pago, total=int(total), vendedor=self.vendedor, vuelto=int(vuelto))
        for x in self.ui.treeWidget.findItems("*", QtCore.Qt.MatchWildcard, 0):
            codigo = int(x.text(0))
            cantidad = int(x.text(2))
            precio = int(x.text(3))
            articulo = todo.Articulo.get(codigo)
            detalle = todo.DetalleVenta(articulo=articulo, cantidad=cantidad, precio=precio, venta=venta, subtotal=(cantidad*precio))

        session.commit()
        self.limpiar()

    def eliminar(self):
        item = self.ui.treeWidget.currentItem()
        articulo = todo.Articulo.get(int(item.text(0)))
        articulo.stock += int(item.text(2))
        index = self.ui.treeWidget.indexOfTopLevelItem(item)
        self.ui.treeWidget.takeTopLevelItem(int(index))
        total = int(self.ui.labelTotal.text()) - int(item.text(3))
        self.ui.labelTotal.setText(str(total))
        self.ui.spinPago.setMinimum(total)
        self.ui.spinPago.setValue(total)
        self.cargaArticulos()
        self.habilitaQuitar()

    def limpiar(self):
        QtGui.QMessageBox.warning(self, 'Mensaje', "Venta realizada con exito")
        self.ui.treeWidget.clear()
        self.ui.labelTotal.setText("0")
        self.ui.spinPago.setMinimum(0)
        self.ui.spinPago.setValue(0)
        self.ui.labelVuelto.setText("0")

    def setVendedor(self, vendedor):
        self.vendedor = vendedor

if __name__ == '__main__':
    todo.initDB()
    app = QtGui.QApplication(sys.argv)
    myapp = FormNuevaVenta()
    myapp.show()
    sys.exit(app.exec_())